package code19_jdk8.stream;

import java.util.Optional;

public class TestTerminate03 {

	public static void main(String[] args) {
		f1();
	}

	private static void f1() {
		// reduce(BinaryOperator<T> accumulator) 对流中元素进行累计操作，前一次操作的结果会作为下一次操作的参数
		// 返回 封装了累计结果的 Optional
		// 统计总工资
		Optional<Double> reduce = Emp.getData().stream()
		.map(Emp::getSal) // 提取出工资
		.reduce((t, sal) -> {
			// t: 前一次操作的结果
			// sal: 当前遍历到的元素
			System.out.println(t + "," + sal);
			return t + sal;
		});
		System.out.println("reduce:" + reduce);
		
		// reduce(T identity, BinaryOperator<T> accumulator) 对流中元素进行累计操作，前一次操作的结果会作为下一次操作的参数。 
		// 会根据 identity 进行初始的操作。identity 就是累计的起始值
		// 会返回 指定的类型的值
		Double reduce2 = Emp.getData().stream()
		.map(Emp::getSal) // 提取出工资
		.reduce(100000D, (sum, sal) -> sum+sal);
		System.out.println("reduce2:" + reduce2);
	}
	
}
